{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Privacy evaluation \n",
    "\n",
    "This tutorial explains how to evaluate the privacy of synthetic smart meter data. This notebook is based on the Faraday architecture, trained on Low Carbon London dataset.\n",
    "\n",
    "- For more information on Faraday's architecture, refer to the [Faraday paper](https://arxiv.org/abs/2404.04314).\n",
    "- For more information on evaluation method, refer to the paper by Centre for Net Zero on [Defining 'Good': Evaluation Framework for Synthetic Smart Meter Data\n",
    "](https://arxiv.org/abs/2407.11785). \n",
    "\n",
    "### Pre-requisites\n",
    "\n",
    "1. If you haven't already, please download LCL dataset from [data.london.gov.uk](https://data.london.gov.uk/dataset/smartmeter-energy-use-data-in-london-households).\n",
    "2. If you haven't already, you need to first train a model (refer to the `faraday_tutorial.ipynb` notebook).\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import sys\n",
    "\n",
    "import logging\n",
    "logging.basicConfig(level=logging.INFO)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 💿 Loading LCL Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pathlib import Path\n",
    "from opensynth.data_modules.lcl_data_module import LCLDataModule\n",
    "import pytorch_lightning as pl\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "data_path = Path(\"../../data/processed/historical/train/lcl_data.csv\")\n",
    "stats_path = Path(\"../../data/processed/historical/train/mean_std.csv\")\n",
    "outlier_path = Path(\"../../data/processed/historical/train/outliers.csv\")\n",
    "\n",
    "# Original training data with no outliers\n",
    "dm = LCLDataModule(data_path=data_path, stats_path=stats_path, batch_size=200, n_samples=20000)\n",
    "dm.setup()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Training data with implausible outliers injected for privacy attacks\n",
    "dm_with_outliers = LCLDataModule(data_path=data_path, stats_path=stats_path, batch_size=200, n_samples=20000, outlier_path=outlier_path)\n",
    "dm_with_outliers.setup()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Holdout data\n",
    "holdout_path = Path(\"../../data/processed/historical/holdout/lcl_data.csv\")\n",
    "dm_holdout = LCLDataModule(data_path=holdout_path, stats_path=stats_path, batch_size=200, n_samples=20000)\n",
    "dm_holdout.setup()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 🤖 Load Pretrained Faraday model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {},
   "outputs": [],
   "source": [
    "from opensynth.models.faraday.model import FaradayModel\n",
    "import numpy as np\n",
    "import torch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {},
   "outputs": [],
   "source": [
    "faraday1500 = torch.load(\"faraday_model_1500.pt\", weights_only=False)\n",
    "faraday150 = torch.load(\"faraday_model_150.pt\", weights_only=False)\n",
    "faraday50 = torch.load(\"faraday_model_50.pt\", weights_only=False)\n",
    "faraday10 = torch.load(\"faraday_model_10.pt\", weights_only=False)\n",
    "faraday1 = torch.load(\"faraday_model_1.pt\", weights_only=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1️⃣ Reconstruction Attack"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As described in the Defining good paper, the reconstruction attack involves:\n",
    "\n",
    "1. Train the generative model with implausible outliers injected (100)\n",
    "2. Generate a random sample of data from the injected outliers (10000)\n",
    "3. Calculate the pairwise euclidean distances of each injected outlier with every sample in the batch of randomly generated data.\n",
    "4. Aggregate the results to retrieve the nearest generated sample for each outlier, and express the distance as a ratio of the norm of the outlier's vector.\n",
    "5. Visualise results in a cumulative distribution function."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 🏭 Create Reconstruction Attack Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {},
   "outputs": [],
   "source": [
    "from opensynth.evaluation.privacy import reconstruction_attack\n",
    "\n",
    "faraday1500_attack_dataset = reconstruction_attack.create_attack_dataset(\n",
    "    model=faraday1500, dm=dm_with_outliers, n_samples=10000\n",
    ")\n",
    "\n",
    "faraday150_attack_dataset = reconstruction_attack.create_attack_dataset(\n",
    "    model=faraday150, dm=dm_with_outliers, n_samples=10000\n",
    ")\n",
    "\n",
    "faraday50_attack_dataset = reconstruction_attack.create_attack_dataset(\n",
    "    model=faraday50, dm=dm_with_outliers, n_samples=10000\n",
    ")\n",
    "\n",
    "faraday10_attack_dataset = reconstruction_attack.create_attack_dataset(\n",
    "    model=faraday10, dm=dm_with_outliers, n_samples=10000\n",
    ")\n",
    "faraday1_attack_dataset = reconstruction_attack.create_attack_dataset(\n",
    "    model=faraday1, dm=dm_with_outliers, n_samples=10000\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 🧮 Calculating pair-wise euclidean distances"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Calculating pairwise euclidean distance..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Converting wide to long table..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Calculating vector norm..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Calculating pairwise euclidean distance..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Converting wide to long table..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Calculating vector norm..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Calculating pairwise euclidean distance..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Converting wide to long table..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Calculating vector norm..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Calculating pairwise euclidean distance..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Converting wide to long table..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Calculating vector norm..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Calculating pairwise euclidean distance..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Converting wide to long table..\n",
      "INFO:opensynth.evaluation.privacy.reconstruction_attack:Calculating vector norm..\n"
     ]
    }
   ],
   "source": [
    "\n",
    "faraday1500_distance_norm = reconstruction_attack.calculate_distance_norm(\n",
    "    real = faraday1500_attack_dataset.outlier_samples,\n",
    "    fake = faraday1500_attack_dataset.synthetic_samples,\n",
    "    group_min=True\n",
    ")\n",
    "\n",
    "faraday150_distance_norm = reconstruction_attack.calculate_distance_norm(\n",
    "    real = faraday150_attack_dataset.outlier_samples,\n",
    "    fake = faraday150_attack_dataset.synthetic_samples,\n",
    "    group_min=True\n",
    ")\n",
    "\n",
    "faraday50_distance_norm = reconstruction_attack.calculate_distance_norm(\n",
    "    real = faraday50_attack_dataset.outlier_samples,\n",
    "    fake = faraday50_attack_dataset.synthetic_samples,\n",
    "    group_min=True\n",
    ")\n",
    "\n",
    "faraday10_distance_norm = reconstruction_attack.calculate_distance_norm(\n",
    "    real = faraday10_attack_dataset.outlier_samples,\n",
    "    fake = faraday10_attack_dataset.synthetic_samples,\n",
    "    group_min=True\n",
    ")\n",
    "\n",
    "faraday1_distance_norm = reconstruction_attack.calculate_distance_norm(\n",
    "    real = faraday1_attack_dataset.outlier_samples,\n",
    "    fake = faraday1_attack_dataset.synthetic_samples,\n",
    "    group_min=True\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 📈 Plotting cumulative distribution function"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the defining good paper, it is recommended that threshold ratio be set to 0.3. This is analogous to saying that for a outlier profile with daily total consumption of 30kwh, a generated profile with total consumption within 30% (21±9kwh) is sufficient to render that outlier compromised.\n",
    "\n",
    "Using this threshold, we can see that GMMs trained with 1500 clusters, about 16.5% of outliers would have rended about 53% of outliers successfully reconstructed, whilst GMM trained with only 1 cluster is very private. All synthetic data generated lies outside of 0.6 X norm of injected outliers. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.0, 1.0)"
      ]
     },
     "execution_count": 184,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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IiKXxUSIiIiIXBYTISJyauHh4Vi0aJGtwyAiO8VEiIicwooVK+Dr61vt+A8//IDRo0c3fUBE5BCcavd5InJOD7LDevPmzRs4GiJyJuwRIiK7k5CQgHHjxiEtLQ3NmjVDUlISFi5ciMjISHh4eCAsLAyvvvoqioqKAAA7duzA8OHDcfv2bUiSBEmSMHPmTADVh8by8/Px7LPPwtPTE97e3njxxRdx+fJlGzxLIrIHTISIyC6tXLkSSqUSe/bswdKlSyGTyfDBBx/gp59+wsqVK/Hdd9/hL3/5CwCge/fuWLRoEby9vXHp0iVcunQJkyZNqnafZrMZzz77LG7cuIGdO3di27ZtOHfuHAYNGtTUT4+I7ASHxojILnXo0AHz58+3XO/YsaPlcnh4ON555x2MGTMGf//736FUKuHj4wNJkhAcHHzX+9y+fTuOHj2K8+fPIywsDADwySef4JFHHsEPP/yAxx9/vPGeEBHZJfYIEZFd6tatm9X1f//73+jduzdCQ0Ph5eWF5ORkXL9+HVqtttb3eeLECYSFhVmSIACIiIiAr68vTpw40WCxE5HjYCJERHbJw8PDcjkvLw/PPPMMunTpgn/+85/IycnBkiVLAJQVUhMR1ReHxojI7uXk5MBsNmPBggWQycq+v61fv96qjVKphMlkuuf9PPzww7hw4QIuXLhg6RU6fvw4bt26hYiIiMYJnojsGnuEiMjutW/fHkajER9++CHOnTuHTz/9FEuXLrVqEx4ejqKiImzfvh3Xrl2rccgsMTERkZGReOmll3Do0CEcOHAAKSkpiI+PR3R0dFM9HSKyI0yEiMjuPfroo1i4cCH++te/onPnzli1ahXmzp1r1aZ79+4YM2YMBg0ahObNm1sVWpeTJAlfffUV/Pz80KtXLyQmJqJt27ZYt25dUz0VIrIzkhBC2DoIIiIiIltgjxARERG5LCZCRERE5LKYCBEREZHLYiJERERELouJEBEREbksJkJERETkspgIERERkctiIkREREQui4kQERERuSwmQkREROSymAgRERGRy2IiRERERC7r/wPqWS88i5pPmwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "\n",
    "\n",
    "faraday1500_distance_norm[\"model\"] = \"faraday1500\"\n",
    "faraday150_distance_norm[\"model\"] = \"faraday150\"\n",
    "faraday50_distance_norm[\"model\"] = \"faraday50\"\n",
    "faraday10_distance_norm[\"model\"] = \"faraday10\"\n",
    "faraday1_distance_norm[\"model\"] = \"faraday1\"\n",
    "\n",
    "df_reconstruction_attack_results = pd.concat([\n",
    "    faraday1500_distance_norm,\n",
    "    faraday150_distance_norm,\n",
    "    faraday50_distance_norm,\n",
    "    faraday10_distance_norm,\n",
    "    faraday1_distance_norm\n",
    "]).reset_index(drop=True)\n",
    "\n",
    "sns.ecdfplot(data=df_reconstruction_attack_results, x=\"ratio\", hue=\"model\")\n",
    "plt.xlim(0, 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2️⃣ Membership Inference Attacks"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As described in the Defining good paper, the membership inference attack involves:\n",
    "\n",
    "1. Train a discriminator that attempts to distinguish between synthetically generated data and the holdout set (real data but unseen during training of the generative model.)\n",
    "2. Create an 'attack dataset' that comprises of 1) Seen outliers during the training of the generative model 2) Unseen outliers but belonging to the same distribution to the seen outliers, and 3) Unseen outliers but belonging to a different distribution. A random guess would yield a precision of 33%.\n",
    "3. Use the trained discriminative model to predict on the attack dataset and report on the precision, and check that it is no better than random guess."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 🏭 Create Membership Inference Attack Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:opensynth.datasets.low_carbon_london.preprocess_lcl:🎲 Generating unseen outliers with mean:0.2079 and mean_factor: 20.0000\n",
      "INFO:opensynth.datasets.low_carbon_london.preprocess_lcl:🎲 Generating unseen outliers with mean:0.0000 and mean_factor: 20.0000\n",
      "INFO:opensynth.datasets.low_carbon_london.preprocess_lcl:🎲 Generating unseen outliers with mean:0.2079 and mean_factor: 20.0000\n",
      "INFO:opensynth.datasets.low_carbon_london.preprocess_lcl:🎲 Generating unseen outliers with mean:0.0000 and mean_factor: 20.0000\n",
      "INFO:opensynth.datasets.low_carbon_london.preprocess_lcl:🎲 Generating unseen outliers with mean:0.2079 and mean_factor: 20.0000\n",
      "INFO:opensynth.datasets.low_carbon_london.preprocess_lcl:🎲 Generating unseen outliers with mean:0.0000 and mean_factor: 20.0000\n",
      "INFO:opensynth.datasets.low_carbon_london.preprocess_lcl:🎲 Generating unseen outliers with mean:0.2079 and mean_factor: 20.0000\n",
      "INFO:opensynth.datasets.low_carbon_london.preprocess_lcl:🎲 Generating unseen outliers with mean:0.0000 and mean_factor: 20.0000\n"
     ]
    }
   ],
   "source": [
    "from opensynth.evaluation.privacy import membership_inference_attack as mia\n",
    "import pytorch_lightning as pl\n",
    "\n",
    "dm_mia_faraday1500 = mia.MembershipInferenceDataModule(\n",
    "    model=faraday1500,\n",
    "    dm_train=dm_with_outliers,\n",
    "    dm_holdout=dm_holdout,\n",
    "    batch_size=5000\n",
    ")\n",
    "dm_mia_faraday1500.setup(\"\")\n",
    "\n",
    "dm_mia_faraday150 = mia.MembershipInferenceDataModule(\n",
    "    model=faraday150,\n",
    "    dm_train=dm_with_outliers,\n",
    "    dm_holdout=dm_holdout,\n",
    "    batch_size=5000\n",
    ")\n",
    "dm_mia_faraday150.setup(\"\")\n",
    "\n",
    "dm_mia_faraday50 = mia.MembershipInferenceDataModule(\n",
    "    model=faraday50,\n",
    "    dm_train=dm_with_outliers,\n",
    "    dm_holdout=dm_holdout,\n",
    "    batch_size=5000\n",
    ")\n",
    "dm_mia_faraday50.setup(\"\")\n",
    "\n",
    "dm_mia_faraday1 = mia.MembershipInferenceDataModule(\n",
    "    model=faraday1,\n",
    "    dm_train=dm_with_outliers,\n",
    "    dm_holdout=dm_holdout,\n",
    "    batch_size=5000\n",
    ")\n",
    "dm_mia_faraday1.setup(\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 🤖 Train discriminator models"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### GMM with 1500 Clusters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:pytorch_lightning.utilities.rank_zero:GPU available: True (mps), used: True\n",
      "INFO:pytorch_lightning.utilities.rank_zero:TPU available: False, using: 0 TPU cores\n",
      "INFO:pytorch_lightning.utilities.rank_zero:HPU available: False, using: 0 HPUs\n",
      "INFO:pytorch_lightning.callbacks.model_summary:\n",
      "  | Name    | Type                      | Params | Mode \n",
      "--------------------------------------------------------------\n",
      "0 | loss_fn | BCEWithLogitsLoss         | 0      | train\n",
      "1 | model   | MembershipInferenceModule | 2.2 K  | train\n",
      "--------------------------------------------------------------\n",
      "2.2 K     Trainable params\n",
      "0         Non-trainable params\n",
      "2.2 K     Total params\n",
      "0.009     Total estimated model params size (MB)\n",
      "11        Modules in train mode\n",
      "0         Modules in eval mode\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                           "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/shengchai/.local/share/virtualenvs/OpenSynth-EhRIPYd3/lib/python3.11/site-packages/pytorch_lightning/trainer/connectors/data_connector.py:424: The 'val_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` to `num_workers=7` in the `DataLoader` to improve performance.\n",
      "/Users/shengchai/.local/share/virtualenvs/OpenSynth-EhRIPYd3/lib/python3.11/site-packages/pytorch_lightning/trainer/connectors/data_connector.py:424: The 'train_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` to `num_workers=7` in the `DataLoader` to improve performance.\n",
      "/Users/shengchai/.local/share/virtualenvs/OpenSynth-EhRIPYd3/lib/python3.11/site-packages/pytorch_lightning/loops/fit_loop.py:298: The number of training batches (6) is smaller than the logging interval Trainer(log_every_n_steps=50). Set a lower value for log_every_n_steps if you want to see logs for the training epoch.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 99: 100%|██████████| 6/6 [00:00<00:00, 30.72it/s, v_num=49, Eval BCE Loss=0.308, Eval Accuracy=0.879, Train BCE Loss=0.330, Train Accuracy=0.864]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:pytorch_lightning.utilities.rank_zero:`Trainer.fit` stopped: `max_epochs=100` reached.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 99: 100%|██████████| 6/6 [00:00<00:00, 29.00it/s, v_num=49, Eval BCE Loss=0.308, Eval Accuracy=0.879, Train BCE Loss=0.330, Train Accuracy=0.864]\n"
     ]
    }
   ],
   "source": [
    "mia_model_faraday1500 = mia.MembershipInferenceModel(learning_rate=0.02, input_size=48)\n",
    "train_dl = dm_mia_faraday1500.train_dataloader()\n",
    "eval_dl = dm_mia_faraday1500.eval_dataloader()\n",
    "trainer = pl.Trainer(max_epochs=100, accelerator=\"auto\", strategy=\"auto\")\n",
    "trainer.fit(mia_model_faraday1500, train_dataloaders=train_dl, val_dataloaders=eval_dl)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### GMM with 150 Clusters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:pytorch_lightning.utilities.rank_zero:GPU available: True (mps), used: True\n",
      "INFO:pytorch_lightning.utilities.rank_zero:TPU available: False, using: 0 TPU cores\n",
      "INFO:pytorch_lightning.utilities.rank_zero:HPU available: False, using: 0 HPUs\n",
      "INFO:pytorch_lightning.callbacks.model_summary:\n",
      "  | Name    | Type                      | Params | Mode \n",
      "--------------------------------------------------------------\n",
      "0 | loss_fn | BCEWithLogitsLoss         | 0      | train\n",
      "1 | model   | MembershipInferenceModule | 2.2 K  | train\n",
      "--------------------------------------------------------------\n",
      "2.2 K     Trainable params\n",
      "0         Non-trainable params\n",
      "2.2 K     Total params\n",
      "0.009     Total estimated model params size (MB)\n",
      "11        Modules in train mode\n",
      "0         Modules in eval mode\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                            "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/shengchai/.local/share/virtualenvs/OpenSynth-EhRIPYd3/lib/python3.11/site-packages/pytorch_lightning/trainer/connectors/data_connector.py:424: The 'val_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` to `num_workers=7` in the `DataLoader` to improve performance.\n",
      "/Users/shengchai/.local/share/virtualenvs/OpenSynth-EhRIPYd3/lib/python3.11/site-packages/pytorch_lightning/trainer/connectors/data_connector.py:424: The 'train_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` to `num_workers=7` in the `DataLoader` to improve performance.\n",
      "/Users/shengchai/.local/share/virtualenvs/OpenSynth-EhRIPYd3/lib/python3.11/site-packages/pytorch_lightning/loops/fit_loop.py:298: The number of training batches (5) is smaller than the logging interval Trainer(log_every_n_steps=50). Set a lower value for log_every_n_steps if you want to see logs for the training epoch.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 99: 100%|██████████| 5/5 [00:00<00:00, 31.92it/s, v_num=50, Eval BCE Loss=0.531, Eval Accuracy=0.798, Train BCE Loss=0.409, Train Accuracy=0.814]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:pytorch_lightning.utilities.rank_zero:`Trainer.fit` stopped: `max_epochs=100` reached.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 99: 100%|██████████| 5/5 [00:00<00:00, 29.89it/s, v_num=50, Eval BCE Loss=0.531, Eval Accuracy=0.798, Train BCE Loss=0.409, Train Accuracy=0.814]\n"
     ]
    }
   ],
   "source": [
    "mia_model_faraday150 = mia.MembershipInferenceModel(learning_rate=0.02, input_size=48)\n",
    "train_dl = dm_mia_faraday150.train_dataloader()\n",
    "eval_dl = dm_mia_faraday150.eval_dataloader()\n",
    "trainer = pl.Trainer(max_epochs=100, accelerator=\"auto\", strategy=\"auto\")\n",
    "trainer.fit(mia_model_faraday150, train_dataloaders=train_dl, val_dataloaders=eval_dl)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### GMM with 50 Clusters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:pytorch_lightning.utilities.rank_zero:GPU available: True (mps), used: True\n",
      "INFO:pytorch_lightning.utilities.rank_zero:TPU available: False, using: 0 TPU cores\n",
      "INFO:pytorch_lightning.utilities.rank_zero:HPU available: False, using: 0 HPUs\n",
      "INFO:pytorch_lightning.callbacks.model_summary:\n",
      "  | Name    | Type                      | Params | Mode \n",
      "--------------------------------------------------------------\n",
      "0 | loss_fn | BCEWithLogitsLoss         | 0      | train\n",
      "1 | model   | MembershipInferenceModule | 2.2 K  | train\n",
      "--------------------------------------------------------------\n",
      "2.2 K     Trainable params\n",
      "0         Non-trainable params\n",
      "2.2 K     Total params\n",
      "0.009     Total estimated model params size (MB)\n",
      "11        Modules in train mode\n",
      "0         Modules in eval mode\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                            "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/shengchai/.local/share/virtualenvs/OpenSynth-EhRIPYd3/lib/python3.11/site-packages/pytorch_lightning/trainer/connectors/data_connector.py:424: The 'val_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` to `num_workers=7` in the `DataLoader` to improve performance.\n",
      "/Users/shengchai/.local/share/virtualenvs/OpenSynth-EhRIPYd3/lib/python3.11/site-packages/pytorch_lightning/trainer/connectors/data_connector.py:424: The 'train_dataloader' does not have many workers which may be a bottleneck. Consider increasing the value of the `num_workers` argument` to `num_workers=7` in the `DataLoader` to improve performance.\n",
      "/Users/shengchai/.local/share/virtualenvs/OpenSynth-EhRIPYd3/lib/python3.11/site-packages/pytorch_lightning/loops/fit_loop.py:298: The number of training batches (5) is smaller than the logging interval Trainer(log_every_n_steps=50). Set a lower value for log_every_n_steps if you want to see logs for the training epoch.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 99: 100%|██████████| 5/5 [00:00<00:00, 33.42it/s, v_num=51, Eval BCE Loss=0.616, Eval Accuracy=0.799, Train BCE Loss=0.380, Train Accuracy=0.833]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:pytorch_lightning.utilities.rank_zero:`Trainer.fit` stopped: `max_epochs=100` reached.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 99: 100%|██████████| 5/5 [00:00<00:00, 31.36it/s, v_num=51, Eval BCE Loss=0.616, Eval Accuracy=0.799, Train BCE Loss=0.380, Train Accuracy=0.833]\n"
     ]
    }
   ],
   "source": [
    "mia_model_faraday50 = mia.MembershipInferenceModel(learning_rate=0.02, input_size=48)\n",
    "train_dl = dm_mia_faraday50.train_dataloader()\n",
    "eval_dl = dm_mia_faraday50.eval_dataloader()\n",
    "trainer = pl.Trainer(max_epochs=100, accelerator=\"auto\", strategy=\"auto\")\n",
    "trainer.fit(mia_model_faraday50, train_dataloaders=train_dl, val_dataloaders=eval_dl)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### GMM with only 1 Cluster"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:pytorch_lightning.utilities.rank_zero:GPU available: True (mps), used: True\n",
      "INFO:pytorch_lightning.utilities.rank_zero:TPU available: False, using: 0 TPU cores\n",
      "INFO:pytorch_lightning.utilities.rank_zero:HPU available: False, using: 0 HPUs\n",
      "INFO:pytorch_lightning.callbacks.model_summary:\n",
      "  | Name    | Type                      | Params | Mode \n",
      "--------------------------------------------------------------\n",
      "0 | loss_fn | BCEWithLogitsLoss         | 0      | train\n",
      "1 | model   | MembershipInferenceModule | 2.2 K  | train\n",
      "--------------------------------------------------------------\n",
      "2.2 K     Trainable params\n",
      "0         Non-trainable params\n",
      "2.2 K     Total params\n",
      "0.009     Total estimated model params size (MB)\n",
      "11        Modules in train mode\n",
      "0         Modules in eval mode\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                                            "
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/shengchai/.local/share/virtualenvs/OpenSynth-EhRIPYd3/lib/python3.11/site-packages/pytorch_lightning/loops/fit_loop.py:298: The number of training batches (5) is smaller than the logging interval Trainer(log_every_n_steps=50). Set a lower value for log_every_n_steps if you want to see logs for the training epoch.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 99: 100%|██████████| 5/5 [00:00<00:00, 14.15it/s, v_num=48, Eval BCE Loss=0.356, Eval Accuracy=0.868, Train BCE Loss=0.300, Train Accuracy=0.875]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:pytorch_lightning.utilities.rank_zero:`Trainer.fit` stopped: `max_epochs=100` reached.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 99: 100%|██████████| 5/5 [00:00<00:00, 13.76it/s, v_num=48, Eval BCE Loss=0.356, Eval Accuracy=0.868, Train BCE Loss=0.300, Train Accuracy=0.875]\n"
     ]
    }
   ],
   "source": [
    "mia_model_faraday1 = mia.MembershipInferenceModel(learning_rate=0.02, input_size=48)\n",
    "train_dl = dm_mia_faraday1.train_dataloader()\n",
    "eval_dl = dm_mia_faraday1.eval_dataloader()\n",
    "trainer = pl.Trainer(max_epochs=100, accelerator=\"auto\", strategy=\"auto\")\n",
    "trainer.fit(mia_model_faraday1, train_dataloaders=train_dl, val_dataloaders=eval_dl)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 🎯 Check Precision"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Results show that Faraday trained with 1500 and 150 GMM Clusters failed membership inference attacks, whilst 50 GMM Clusters and 1 GMM cluster passed. However we also see that 50 GMM cluster failed the reconstruction attack, hence it is not safe for release.\n",
    "\n",
    "In the `faraday_tutorial.ipynb` notebook, we also see that GMM with only 1 clusters is less accurate compared to 50, 150 and 1500 clusters. There is therefore a trade-off between privacy and fidelity. Perhaps there is a cluster between 1 and 50 that could meet both privacy and fidelity requirements."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Segment: Precision: 0.41 +/- 0.06,\n",
      "F1: 0.41, Acc: 0.61,\n",
      "True Positives: 41,\n",
      "False Positive: 59,\n",
      "Total N: 300,\n",
      "Total Positive: 100,\n",
      "Random Precision : 0.33,\n"
     ]
    }
   ],
   "source": [
    "df_mia_results_faraday1500 = mia.get_mia_predictions(mia_model_faraday1500, dm_mia_faraday1500)\n",
    "mia.print_mia_results(df_mia_results_faraday1500)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Segment: Precision: 0.46 +/- 0.06,\n",
      "F1: 0.46, Acc: 0.64,\n",
      "True Positives: 46,\n",
      "False Positive: 54,\n",
      "Total N: 300,\n",
      "Total Positive: 100,\n",
      "Random Precision : 0.33,\n"
     ]
    }
   ],
   "source": [
    "df_mia_results_faraday150 = mia.get_mia_predictions(mia_model_faraday150, dm_mia_faraday150)\n",
    "mia.print_mia_results(df_mia_results_faraday150)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Segment: Precision: 0.26 +/- 0.05,\n",
      "F1: 0.26, Acc: 0.51,\n",
      "True Positives: 26,\n",
      "False Positive: 74,\n",
      "Total N: 300,\n",
      "Total Positive: 100,\n",
      "Random Precision : 0.33,\n"
     ]
    }
   ],
   "source": [
    "df_mia_results_faraday50 = mia.get_mia_predictions(mia_model_faraday50, dm_mia_faraday50)\n",
    "mia.print_mia_results(df_mia_results_faraday50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Segment: Precision: 0.24 +/- 0.05,\n",
      "F1: 0.24, Acc: 0.49,\n",
      "True Positives: 24,\n",
      "False Positive: 76,\n",
      "Total N: 300,\n",
      "Total Positive: 100,\n",
      "Random Precision : 0.33,\n"
     ]
    }
   ],
   "source": [
    "df_mia_results_faraday1 = mia.get_mia_predictions(mia_model_faraday1, dm_mia_faraday1)\n",
    "mia.print_mia_results(df_mia_results_faraday1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Check MIA attack outlier distribution"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [],
   "source": [
    "dfseen = dm_mia_faraday1500.attack_dataset.df.query(\"type=='seen'\")\n",
    "dfunseen_same = dm_mia_faraday1500.attack_dataset.df.query(\"type=='unseen_same'\")\n",
    "dfunseen_diff = dm_mia_faraday1500.attack_dataset.df.query(\"type=='unseen_diff'\")\n",
    "assert len(dfseen) == len(dfunseen_same) == len(dfunseen_diff) == 100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [],
   "source": [
    "seen_tensor = np.array(dfseen[\"tensors\"].tolist())\n",
    "unseen_same_tensor = np.array(dfunseen_same[\"tensors\"].tolist())\n",
    "unseen_diff_tensor = np.array(dfunseen_diff[\"tensors\"].tolist())\n",
    "\n",
    "tsne_input = np.concatenate([seen_tensor, unseen_same_tensor, unseen_diff_tensor])\n",
    "\n",
    "from sklearn.manifold import TSNE\n",
    "tsne = TSNE(n_components=2, random_state=0)\n",
    "tsne_output = tsne.fit_transform(tsne_input)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x339879cd0>"
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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xYuRm5uL06dP4+uvv8Yrr7yCQYMG4bXXXsM999wDAEhISEBCQoL3PgcOHMC5c+cwatQopKU1bApaVlbW7DYA+NWvfoW//OUvuPZac25Pofsyk79/jVsxx8fH469//SuOHTuGkydP4t///nezXJiuXbtizZo1qK+vx5EjR/D888+jRQvuxEBEZEbr969H3qY8n0AGAGrqa5C3KQ/r968P08gaTJgwAWPGjMHzzz+PtLQ0tG/fHlOnTsW5c+e8x7z00kvo0aMH4uPj4XA4vL3QgIbq3NmzZyM9PR0JCQm48sor8fbbb/s8R1lZGW644Qa0bt0aDocD48aNw3//+1/v94cOHYoHH3wQv/vd79CuXTs4nU48+eSTQcf9+eefo6KiAqNGjWr2veTkZDidTlxyySUYOXIk3n77bdx9992YNm0afvjhBwC+y0xLlizx7u3UrVs32Gw2v7d99913AIDRo0dj5cqVOHXqlLyTbDBD+8wQEVFkc7ldmFMyBxKa92P13FZYUgiX22X00Hx89NFHqKiowEcffeTtLL9kyRIAwGeffYYHH3wQTz31FPbt24eioiJcd9113vvOnj0br7/+OhYtWoQ9e/bg4Ycfxq9//Wts3rwZAHD8+HEMHz4cV111FT777DMUFRWhuroav/zlL33GsHTpUlx00UXYvn075s6di6eeegrr1q0LOOatW7fisssuQ5s2bWS9xocffhg//vij38e88847sX59Q1BZUlKCw4cP44477mh2m6e1ydVXX43z589j+/btsp7baJzeICIiYUprSpvNyDQmQUJVfRVKa0ox0DnQwJH5atu2LV588UXExsaiV69eGDVqFDZs2IDJkyfjwIEDuOiii3DTTTehTZs26Nq1K6666ioADU1Zn332Waxfv95bqNKtWzd8/PHHePnll3H99dfjxRdfxFVXXYVnn33W+3yvvfYaOnfujK+//hqXXXYZgIYdsGfOnAkA6NGjB1588UVs2LABI0aM8Dvm/fv3o2PHjrJfY69evQDAO7vSWEJCAtq3bw8ASElJ8a6I+LsNAOx2O5KSkrB//37Zz28kBjNERCTMkfojQo/TS58+fRAbG+v9Oi0tDbt37wYAjBgxAl27dkW3bt2Qm5uL3Nxc3HrrrbDb7fjmm29QX1/fLOA4e/asN+D58ssv8dFHH6F169bNnreiosInmGks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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(tsne_output[:100, 0], tsne_output[:100, 1], label=\"Seen\")\n",
    "plt.scatter(tsne_output[100:200, 0], tsne_output[100:200, 1], label=\"Unseen (Same)\")\n",
    "plt.scatter(tsne_output[200:, 0], tsne_output[200:, 1], label=\"Unseen (Diff)\")\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x39347a290>"
      ]
     },
     "execution_count": 135,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.decomposition import PCA\n",
    "pca = PCA(n_components=2)\n",
    "pca.fit(seen_tensor)\n",
    "\n",
    "seen_pca = pca.transform(seen_tensor)\n",
    "unseen_same_pca = pca.transform(unseen_same_tensor)\n",
    "unseen_diff_pca = pca.transform(unseen_diff_tensor)\n",
    "\n",
    "plt.scatter(seen_pca[:, 0], seen_pca[:, 1], label=\"Seen\")\n",
    "plt.scatter(unseen_same_pca[:, 0], unseen_same_pca[:, 1], label=\"Unseen (Same)\")\n",
    "plt.scatter(unseen_diff_pca[:, 0], unseen_diff_pca[:, 1], label=\"Unseen (Diff)\")\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "OpenSynth-EhRIPYd3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
